home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / i / internet / software / mailsr / mailrc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-09-03  |  3.3 KB  |  153 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define FALSE 0
  5. #define TRUE !FALSE
  6.  
  7. extern char curpath[];
  8.  
  9.  
  10. int lookup_alias(char *user,char *shortname,char *longname,size_t len)
  11. {
  12.   char line[128];
  13.   FILE *af;
  14.   char *p=NULL;
  15.   size_t llen,lnlen;
  16.  
  17.   strcpy(longname,shortname);
  18.   sprintf(line,"%s\\mailrc.%.3s",curpath,user);
  19.   af = fopen(line,"r");
  20.   if(!af)
  21.   {
  22.     sprintf(line,"c:\\mailrc.%.3s",user);
  23.     af = fopen(line,"r");
  24.     if(!af)    return(FALSE);
  25.   }
  26.   while(fgets(line,128,af))
  27.   { 
  28.     p = strchr(line,'\n');
  29.     if(p) *p = 0;
  30.     p=strtok(line," \t");
  31.     if(p && !stricmp(p,"alias"))
  32.     {
  33.       p= strtok(NULL," \t");
  34.       if(!strcmp(p,shortname))
  35.       {
  36.         p=strtok(NULL,"\n");
  37.         if(p) strcpy(longname,p);
  38.         lnlen = strlen(longname);
  39.         if(longname[lnlen-1] == '\\')
  40.         {
  41.           longname[--lnlen] = 0;  /* cut off '\\' */
  42.           while(lnlen < len && fgets(line,128,af))
  43.           {
  44.             llen = strlen(line);
  45.             if(lnlen+2+llen > len) 
  46.             {
  47.               fclose(af);
  48.               return(-1);  /* buffer overflow */
  49.             }
  50.             if(line[0] == ' ' || line[0] == '\t' )
  51.             {
  52.               strcat(longname,"\r\n");
  53.               strcat(longname,line);
  54.               lnlen += 2 + llen;
  55.             }
  56.             if(longname[lnlen-1] == '\n') lnlen--;
  57.             if(longname[lnlen-1] == '\\')
  58.             {
  59.               longname[--lnlen] = 0;
  60.             }
  61.             else
  62.               break;
  63.           }
  64.           longname[lnlen] = 0;  /* cut off '\\' */
  65.         }
  66.         fclose(af);
  67.         return(TRUE);
  68.       }
  69.     }
  70.   }
  71.   fclose(af);
  72.   return(FALSE);
  73. }
  74.  
  75.  
  76. int range_next(char *r,int max)
  77. {
  78.   static char *sr = { ""  };
  79.   static int nr = 0;
  80.   char *p;
  81.   int  ar;
  82.  
  83.   if(r)
  84.   {
  85.     sr = r;
  86.     nr = 0;
  87.   }
  88.   while(*sr && (*sr==',' || *sr==' ' || *sr=='\t')) sr++;
  89.   if(!*sr) return(0);  /* at end of string */
  90.   if(*sr=='-') 
  91.   {
  92.     ar = (int)strtol(sr+1,&p,10);
  93.     if(!ar) ar = max;
  94.     if(nr == ar-1) sr = p;
  95.     if(nr > ar-1) return(0);
  96.     return(++nr);
  97.   }
  98.   ar = (int)strtol(sr,&sr,10);
  99.   if(nr > ar) return(0);
  100.   nr = ar;
  101.   return(nr);
  102. }
  103.  
  104.  
  105.  
  106.  
  107. long gethostbyname(char *hostname)
  108. {
  109.   register FILE *fp;
  110.   register long inet = 0L;
  111.   register char *p; 
  112.   char buf[128];
  113.   int n1,n2,n3,n4;
  114.  
  115.   if(strchr(hostname,'.'))
  116.   {
  117.     if(sscanf(hostname,"%d.%d.%d.%d",&n1,&n2,&n3,&n4) == 4)
  118.       inet = ((long)n1<<24) + ((long)n2<<16) + ((long)n3<<8) +(long)n4;
  119.   }
  120.   if(inet==0)
  121.   {
  122.     sprintf(buf,"%s\\hosts",curpath);
  123.     if((fp=fopen(buf,"r")) == NULL && (fp=fopen("c:\\hosts","r")) == NULL)
  124.     {
  125.       inet=0L;
  126.     }
  127.     else
  128.     {
  129.       while (!feof(fp))
  130.       {
  131.         fgets(buf,(int)sizeof(buf),fp);
  132.         p=strtok(buf," \t");
  133.         if(!p || *p=='#' || *p=='\n') continue;
  134.         if((sscanf(p,"%d.%d.%d.%d",&n1,&n2,&n3,&n4) == 4))
  135.           do
  136.           {
  137.             p=strtok(NULL," \t\n");
  138.             if(p && !strcmp(p,hostname))
  139.             {
  140.               inet = ((long)n1<<24) + ((long)n2<<16) + ((long)n3<<8) +(long)n4;
  141.               fclose(fp);
  142.               return(inet);
  143.             }
  144.           } 
  145.         while(p);
  146.         else inet=0L;
  147.       }
  148.       fclose(fp);         
  149.     }
  150.   }
  151.   return(inet);
  152. }
  153.